
package model.domain.bd;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class Tabla {
    protected boolean nombreInvariable;
            
    private String nombre;
    List<Registro> registros;

    public Tabla() {
        nombreInvariable = false;
        //this.nombre = nombre;
        registros = new ArrayList<Registro>();
    }

    public void setNombre(String nombre) {
        if(!nombreInvariable)
            this.nombre = nombre;        
    }

    public String getNombre() {
        return nombre;
    }

    @Override
    public String toString() {
        return "Tabla{" + "nombre=" + nombre + "; nroRegistros=" + registros.size() +"}";
    }

    public void addRegistro(Registro registro) {
        registros.add(registro);
        registro.tabla = this;
    }

    public String scriptInsert() {
        StringBuilder sb = new StringBuilder();
        for(Registro r: registros) {
            sb.append(r.scriptInsert());
        }
        return sb.toString();
    }

    public List<String> getCampos() throws Exception {
        //System.out.println("NOMBRE="+nombre);
        if(!tieneCampos())
            throw new Exception("La tabla "+nombre+" no tiene campos");
        
        List<String> lista = new ArrayList<String>();
        Registro r = registros.get(0);//del primer registro
        for(Map.Entry<String,String> e : r.valores.entrySet()) {
            lista.add(e.getKey());
        }
        //Map<String, String> treeMap = new TreeMap<String, String>(unsortMap);        
        return lista;
    }
    
    
    public String getCamposString() throws Exception {
        StringBuilder sb = new StringBuilder();        
        for(String campo : this.getCampos()) {
            sb.append(campo+",");
        }
        int n = sb.length();
        sb.delete(n-1,n);//borrando la ultima coma
        return sb.toString();
    }

    boolean tieneCampos() {
        return registros.size()!=0;
    }
}
